package com.rabc.web.controller;

import com.core.base.BaseController;
import com.rabc.framework.web.domain.LoginUserDetails;
import com.rabc.framework.web.service.SysLoginService;
import com.rabc.utils.SecurityUtils;
import com.rabc.web.annotation.Loggable;
import com.rabc.web.entity.SysUser;
import com.rabc.web.entity.vo.SysLoginVo;
import com.rabc.web.service.SysMenuService;
import com.rabc.web.service.SysUserService;
import com.utils.AuthUtils;
import com.utils.EncryptionUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.utils.R;

import java.util.*;

@Slf4j
@RestController
@Api(tags = "登录")
@RequestMapping("/sys")
public class LoginController extends BaseController {

    @Autowired
    private SysUserService userService;

    @Autowired
    SysMenuService sysMenuService;


    @Autowired
    SysLoginService loginService;

    @ApiOperation(value = "登录", response = R.class)
    @PostMapping("/login")
    public R login(@RequestBody SysLoginVo user) {
        String token = loginService.login(user.getUsername(), user.getPassword(), user.getCode());


        return R.success("登录成功", token);
    }


    @GetMapping("/profile")
    public R profile() {
        log.info("接口");

        return R.success(generateUserData());
    }
    @GetMapping("/getRoutes")
    public R getRoutes() {
        log.info("接口");

        return R.success();
    }

    public static Map<String, Object> generateUserData() {
        Map<String, Object> response = new HashMap<>();
        response.put("success", true);
        response.put("code", 200);
        response.put("message", "获取资料成功");
        LoginUserDetails currentUser = SecurityUtils.getCurrentUser();
        // 构造用户信息
        Map<String, Object> userInfo = new HashMap<>();
        userInfo.put("_id", "612710a0ec87aa543c9c341d");
        userInfo.put("id", "0");
        userInfo.put("username", "super-admin");
        userInfo.put("title", "超级管理员");
        userInfo.put("avatar", "https://m.imooc.com/static/wap/static/common/img/logo-small@2x.png");

        // 构造角色信息
        List<Map<String, Object>> roles = new ArrayList<>();
        Map<String, Object> role = new HashMap<>();
        role.put("id", "1");
        role.put("title", "超级管理员");
        roles.add(role);
        userInfo.put("role", roles);

        // 构造权限信息
        Map<String, Object> permission = new HashMap<>();
        permission.put("menus", Arrays.asList("userManage", "roleList", "permissionList", "articleRanking", "articleCreate"));
        permission.put("points", Arrays.asList("distributeRole", "importUser", "removeUser", "distributePermission"));
        userInfo.put("permission", permission);

        // 设置用户信息到响应数据中
        userInfo.put("currentUser", currentUser);

        return userInfo;
    }

    private static Map<String, Object> createItem(String title, int percentage, String content) {
        Map<String, Object> item = new HashMap<>();
        item.put("title", title);
        item.put("percentage", percentage);
        item.put("content", content);
        return item;
    }

    public static Map<String, Object> generateData() {
        Map<String, Object> response = new HashMap<>();
        response.put("success", true);
        response.put("code", 10000);
        response.put("message", "获取资料成功");

        List<Map<String, Object>> dataList = new ArrayList<>();

        // 构造每个条目的数据
        dataList.add(createItem("Vue3 + 全家桶",
                100,
                "项目基于最新的<a target=\"_blank\" href=\"https://v3.cn.vuejs.org/guide/introduction.html\">vue3</a>全家桶进行开发，全面使用最新的的<a target=\"_blank\" href=\"https://github.com/vuejs/rfcs/blob/master/active-rfcs/0040-script-setup.md\">RFC script setup</a>语法标准，为你带来不一样的 vue3 开发体验"));

        dataList.add(createItem("Element-Plus",
                100,
                "<a target=\"_blank\" href=\"https://element-plus.org/#/zh-CN\">Element Plus</a>，一套为开发者、设计师和产品经理准备的基于 Vue 3.0 的桌面端组件库。是 Element UI 的官方 vue 3 兼容版本"));

        dataList.add(createItem("vue-element-admin",
                100,
                "<a target=\"_blank\" href=\"https://panjiachen.github.io/vue-element-admin-site/zh/guide/\">vue-element-admin</a> 是一个后台前端解决方案，它基于 vue 和 element-ui实现，并有用 70K 的 <a target=\"_blank\" href=\"https://github.com/PanJiaChen/vue-element-admin\">star</a>。<br />本项目使用最新 vue 技术对其进行了重构，并在其现有功能上进行了扩展，致力于为大家带来更加符合 <b>现代后台开发的前端技术解决方案</b>"));

        dataList.add(createItem("ESLint + Git Hooks",
                100,
                "ESLint 对应编码规范，Git Hooks 对应 Git 规范。<br /> 想要开发出大厂标准的企业级项目，需要先从规范做起！"));

        dataList.add(createItem("架构设计",
                100,
                "阿里前端 P7 岗被称为 《技术专家》，也有人喜欢叫他们为 “前端架构师”，既然被称为 “架构师” ，那么架构设计当然是不可缺少的一环咯"));

        dataList.add(createItem("权限验证（页面权限、功能权限、动态权限、权限配置）",
                100,
                "全面的后台权限验证系统，实现了 <b>页面权限、功能权限、动态权限、权限配置</b> 等全方位的权限功能"));

        dataList.add(createItem("功能引导",
                100,
                "对用户的功能引导"));

        dataList.add(createItem("可配置 + 收缩侧边栏",
                100,
                "根据路由动态生成的 Menu 菜单，实现真正的 <b>配置 Menu</b>"));

        dataList.add(createItem("动态面包屑",
                100,
                "动态生成的面包屑数据"));

        dataList.add(createItem("Tags View",
                100,
                "便签快捷导航功能"));

        dataList.add(createItem("svg sprite 图标",
                100,
                "自定义的 svg Icon 配合 el Icon 自动分配导入"));

        dataList.add(createItem("国际化",
                100,
                "多语言的国际化功能实现"));

        dataList.add(createItem("动态换肤",
                100,
                "主题更换功能，提供缓存实现"));

        dataList.add(createItem("页面搜索",
                100,
                "根据路由配置自动化生成的页面搜索数据，无需手动配置"));

        dataList.add(createItem("excel 导出、导入",
                100,
                "excel 表格的导入、导出实现"));

        dataList.add(createItem("zip 导入",
                100,
                "页面数据导出为 zip"));

        dataList.add(createItem("富文本 + MarkDown 编辑器",
                100,
                "常用的编辑器功能，包含 富文本编辑器 && MarkDown 编辑器"));

        dataList.add(createItem("动态表格 + 拖拽表格 + 内联编辑表格",
                100,
                "表格列表的常见操作，多用于包含表格项的展示功能中。包括：动态表格 && 拖拽表格 && 内联编辑表格"));

        dataList.add(createItem("统一错误处理",
                100,
                "页面级的错误处理由 vue-router 统一处理。包含 401 和 404 的错误处理"));

        dataList.add(createItem("发布",
                100,
                "构建与发布"));

        dataList.add(createItem("其他",
                100,
                "除了以上功能之外，我们还实现了很多其他的功能，比如：CDN、动态的环境变量配置、懒加载、跨域等等"));

        response.put("data", dataList);

        return response;
    }


}
